<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>

<canvas id="mycanvas"><button id="button"></button></canvas>
<script>
var canvas = document.getElementById('mycanvas');
var ctx = canvas.getContext('2d');
var button = document.getElementById('button');
button.focus();

function testAPICalls() {
    ctx.beginPath();
    ctx.rect(0, 0, 10, 10);
    ctx.fill();
    ctx.stroke();
    ctx.drawFocusIfNeeded(button);
    ctx.isPointInPath(0,0);
    ctx.isPointInStroke(0,0);
    ctx.clearRect(0, 0, 5, 5);
    ctx.fillRect(0, 0, 5, 5);
    ctx.strokeRect(0, 0, 5, 5);
    ctx.scrollPathIntoView();
    data = ctx.createImageData(5, 5);
    ctx.putImageData(data, 0, 0);
    ctx.font = "20px arial";
    ctx.fillText("Test", 20, 20);
    ctx.strokeText("Test", 20, 20);
    ctx.measureText("Test");
    ctx.clip();
    ctx.drawImage(canvas, 0, 0);
    ctx.getImageData(0, 0, 5, 5);
    canvas.toDataURL();
}

test(function(){

    // First pass: normal conditions
    testAPICalls();

    // Test a canvas so large that it has no chance of successful allocating a backing
    canvas.width = 10000000;
    canvas.height = 10000000;
    testAPICalls();

    // Test a canvas that is valid, but detached from the DOM
    canvas.width = 100;
    canvas.height = 100;
    canvas.remove();
    testAPICalls();

}, "Verify that canvas API calls on a canvas with no backing or no visibility do not crash or throw exceptions.");
</script>
